package com.ftg.elvis.service;

import com.ftg.elvis.Util.ExtractId;
import com.ftg.elvis.mapper.AdminRoleMapper;
import com.ftg.elvis.pojo.Menu;
import com.ftg.elvis.pojo.Role;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

@Service
public class AdminRoleService {

	@Autowired
	AdminRoleMapper adminRoleMapper;

	/**
	 * 查看所有角色
	 * @param page
	 * @param limit
	 * @return
	 */
	public List<Role> showAll(int page, int limit) {
		page = (page - 1) * limit;
		return adminRoleMapper.showAll(page, limit);
	}

	/**
	 * 查询角色总数
	 * @return
	 */
	public int getCount() {
		return adminRoleMapper.getCount();
	}

	/**
	 * 添加角色
	 * @param role
	 * @return
	 */
	public int add(Role role) {
		return adminRoleMapper.add(role);
	}

	/**
	 * 删除角色
	 * @param rid
	 * @return
	 */
	public int delete(String rid) {
		adminRoleMapper.delete(rid);
		adminRoleMapper.deleteMenu(rid);
		return 1;
	}

	/**
	 * 修改角色
	 * @param role
	 * @return
	 */
	public int update(Role role) {
		return adminRoleMapper.update(role);
	}

	/**
	 * 修改某个角色的权限
	 * @param role_id
	 * @param menu_ids
	 * @return
	 */
	@Transactional
	public int updateMenus(String role_id, String[] menu_ids) {
		try{
			//定义集合，用于存储处理后的menu_id
			List<String> mids = new ArrayList<>();

			//删除该角色原有权限
			adminRoleMapper.delMyMenusById(role_id);

			if(menu_ids.length > 1) {
				//处理字符串数组
				for (int i = 0; i < menu_ids.length; i++) {
					if (i % 2 == 0) {
						String menu_id = this.updateMenu_id(menu_ids[i]);
						mids.add(menu_id);
					} else {
						continue;
					}
				}

				//将新的权限逐一赋给该角色
				for (String menu_id : mids) {
					adminRoleMapper.addMyMenus(UUID.randomUUID().toString(), role_id, menu_id);
				}
			}

			return 1;
		}catch (Exception e){
			e.printStackTrace();
			return 0;
		}

	}

	/**
	 * 将字符串中的menu_id提取出来
	 * @param menu_id
	 * @return
	 */
	private String updateMenu_id(String menu_id) {
		//去掉[ { value ": "
		return ExtractId.extractId(menu_id);
	}

	/**
	 * 查看某个角色已有权限
	 * @param role_id
	 * @return
	 */
	public List<Menu> showMyMenus(String role_id) {
		return adminRoleMapper.showMyMenus(role_id);
	}

	/**
	 * 查看所有权限
	 * @return
	 */
	public List<Menu> showAllMenus() {
		return adminRoleMapper.showAllMenus();
	}
}
